#!/bin/zsh

# 项目根目录
PROJECT_ROOT="$(cd "$(dirname "$0")" && pwd)"

# 后端jar文件路径
BACKEND_JAR="${PROJECT_ROOT}/common/target/common-1.0.0.jar"

# 前端目录路径
FRONTEND_DIR="${PROJECT_ROOT}/common/src/main/webapp"

# 停止后端服务函数
stop_backend() {
    echo "正在检查并停止后端服务..."
    # 查找后端服务进程
    BACKEND_PIDS=$(pgrep -f "java -jar .*/common/target/common-1.0.0.jar")
    
    if [ -n "$BACKEND_PIDS" ]; then
        echo "找到后端服务进程: $BACKEND_PIDS"
        # 杀死后端服务进程
        kill -9 $BACKEND_PIDS
        echo "后端服务已停止。"
        # 等待1秒确保进程完全终止
        sleep 1
    else
        echo "后端服务未运行。"
    fi
}

# 清空日志目录函数
clear_logs() {
    echo "正在清空日志目录..."
    # 检查日志目录是否存在
    if [ -d "${PROJECT_ROOT}/logs" ]; then
        # 清空日志目录下的所有文件，但保留目录结构
        rm -f "${PROJECT_ROOT}/logs"/*
        echo "日志目录已清空。"
    else
        echo "日志目录不存在，将在启动服务时创建。"
    fi
}

# 停止前端服务函数
stop_frontend() {
    echo "正在检查并停止前端服务..."
    # 查找前端服务进程
    FRONTEND_PIDS=$(pgrep -f "webpack-dev-server")
    
    if [ -n "$FRONTEND_PIDS" ]; then
        echo "找到前端服务进程: $FRONTEND_PIDS"
        # 杀死前端服务进程
        kill -9 $FRONTEND_PIDS
        echo "前端服务已停止。"
        # 等待1秒确保进程完全终止
        sleep 1
    else
        echo "前端服务未运行。"
    fi
}

# 检查并构建后端项目
check_and_build_backend() {
    echo "检查后端jar文件..."
    if [ ! -f "${BACKEND_JAR}" ]; then
        echo "后端jar文件不存在，开始构建项目..."
        cd "${PROJECT_ROOT}"
        mvn clean package
        if [ $? -ne 0 ]; then
            echo "后端项目构建失败，请检查错误并重新运行脚本。"
            exit 1
        fi
    else
        echo "后端jar文件已存在。"
    fi
}

# 检查并安装前端依赖
check_and_install_frontend_deps() {
    echo "检查前端依赖..."
    cd "${FRONTEND_DIR}"
    if [ ! -d "node_modules" ]; then
        echo "前端依赖未安装，开始安装依赖..."
        npm install --legacy-peer-deps
        if [ $? -ne 0 ]; then
            echo "前端依赖安装失败，请检查错误并重新运行脚本。"
            exit 1
        fi
    else
        echo "前端依赖已安装。"
    fi
}

# 启动后端服务
start_backend() {
    echo "启动后端服务..."
    cd "${PROJECT_ROOT}"
    # 创建logs目录（如果不存在）
    mkdir -p "${PROJECT_ROOT}/logs"
    # 检查是否已经有后端服务在运行
    if pgrep -f "java -jar ${BACKEND_JAR}" > /dev/null; then
        echo "后端服务已经在运行中。"
    else
        # 在后台启动后端服务并将日志写入文件
        nohup java -jar -Dlogging.file.name=${PROJECT_ROOT}/logs/backend.log ${BACKEND_JAR} > /dev/null 2>&1 &
        echo "后端服务已在后台启动。"
        echo "后端日志文件路径: ${PROJECT_ROOT}/logs/backend.log"
    fi
}

# 启动前端服务
start_frontend() {
    echo "启动前端服务..."
    cd "${FRONTEND_DIR}"
    # 创建logs目录（如果不存在）
    mkdir -p "${PROJECT_ROOT}/logs"
    # 检查是否已经有前端服务在运行
    if pgrep -f "webpack-dev-server" > /dev/null; then
        echo "前端服务已经在运行中。"
    else
        # 在后台启动前端服务并将日志写入文件
        nohup npm run dev > ${PROJECT_ROOT}/logs/frontend.log 2>&1 &
        echo "前端服务已在后台启动。"
        echo "前端日志文件路径: ${PROJECT_ROOT}/logs/frontend.log"
    fi
}

# 显示服务日志
show_service_logs() {
    echo "\n===== 服务日志查看选项 ======"
    echo "1. 查看后端服务状态和日志"
    echo "2. 查看前端服务状态和日志"
    echo "3. 打开后端日志文件"
    echo "4. 打开前端日志文件"
    echo "5. 退出日志查看"
    echo "==========================="
    
    echo -n "请选择要执行的操作 [1-5]: "
    read choice
    
    case $choice in
        1)
            echo "\n检查后端服务状态..."
            # 查找后端服务进程
            BACKEND_PID=$(pgrep -f "java -jar ${BACKEND_JAR}")
            if [ -n "${BACKEND_PID}" ]; then
                echo "后端服务正在运行，进程ID: ${BACKEND_PID}"
                echo "服务访问地址: http://localhost:8080/dtd"
                echo "后端日志文件路径: ${PROJECT_ROOT}/logs/backend.log"
                echo "可以选择选项3来打开后端日志文件。"
            else
                echo "后端服务未运行。"
                echo "后端日志文件路径: ${PROJECT_ROOT}/logs/backend.log"
            fi
            show_service_logs
            ;;
        2)
            echo "\n检查前端服务状态..."
            # 查找前端服务进程
            FRONTEND_PID=$(pgrep -f "webpack-dev-server")
            if [ -n "${FRONTEND_PID}" ]; then
                echo "前端服务正在运行，进程ID: ${FRONTEND_PID}"
                echo "Web界面访问地址: http://localhost:8081"
                echo "前端日志文件路径: ${PROJECT_ROOT}/logs/frontend.log"
                echo "可以选择选项4来打开前端日志文件。"
            else
                echo "前端服务未运行。"
                echo "前端日志文件路径: ${PROJECT_ROOT}/logs/frontend.log"
            fi
            show_service_logs
            ;;
        3)
            echo "\n正在打开后端日志文件..."
            # 检查日志文件是否存在
            if [ -f "${PROJECT_ROOT}/logs/backend.log" ]; then
                echo "打开后端日志文件: ${PROJECT_ROOT}/logs/backend.log"
                # 使用默认文本编辑器打开日志文件
                open "${PROJECT_ROOT}/logs/backend.log"
            else
                echo "后端日志文件不存在: ${PROJECT_ROOT}/logs/backend.log"
                echo "请先启动后端服务以生成日志文件。"
            fi
            show_service_logs
            ;;
        4)
            echo "\n正在打开前端日志文件..."
            # 检查日志文件是否存在
            if [ -f "${PROJECT_ROOT}/logs/frontend.log" ]; then
                echo "打开前端日志文件: ${PROJECT_ROOT}/logs/frontend.log"
                # 使用默认文本编辑器打开日志文件
                open "${PROJECT_ROOT}/logs/frontend.log"
            else
                echo "前端日志文件不存在: ${PROJECT_ROOT}/logs/frontend.log"
                echo "请先启动前端服务以生成日志文件。"
            fi
            show_service_logs
            ;;
        5)
            echo "退出日志查看。"
            ;;
        *)
            echo "无效的选项，请重试。"
            show_service_logs
            ;;
    esac
}

# 主函数
main() {
    echo "===== DST数据同步工具启动脚本 ======"
    
    # 检查并停止现有服务
    echo "\n1. 正在检查并停止现有服务..."
    stop_backend
    stop_frontend
    
    # 清空日志目录
    echo "\n2. 正在清空日志目录..."
    clear_logs
    
    # 准备并启动服务
    echo "\n3. 正在准备并启动服务..."
    check_and_build_backend
    check_and_install_frontend_deps
    start_backend
    start_frontend
    echo "==================================="
    echo "服务启动完成！"
    echo "后端服务访问地址: http://localhost:8080/dst"
    echo "前端服务访问地址: http://localhost:8081"
    echo "服务日志已写入到 ${PROJECT_ROOT}/logs/ 目录。"
    echo "可以通过查看日志文件来监控服务状态。"
}

# 执行主函数
main